void main() {
  // testListMap();

  testListWhere('王');

  // testlist();

  // testLimitTypeList();

  // testUnlimitList();

  // testUnlimitLis1();
}

// 测试 固定List
void testlist() {
  List list;
  list = List(3); // 限定了长度为3  越界会报错，不限定类型，可添加任意类型的数据

  list[0] = 1;

  // 固定 List 不能使用 list.add() 为其添加元素, 否则会抛 Unsupported operation: Cannot add to a fixed-length list
  // list.add(2);

  print('list: ${list}');
}

// 测试不限制长度限制类型的 list
void testLimitTypeList() {
  //var 初始赋值，限定了类型，只能是int, 不限定长度
  var list = [1, 2, 3];
  list.add(4);
  // list.add('five');  //The argument type 'String' can't be assigned to the parameter type 'int'.
  print('limit type list: ${list}');
}

// 不限制 list
void testUnlimitList() {
  // 不限制长度、类型
  var list = [2, '3', true];
  list[0] = 'one';
  list[1] = 1;
  list.add(4);
  list.add(5);
  print('unlimit list: ${list}'); //[one, 1, true]
}

// 不限制 list
void testUnlimitLis1() {
  // 不限制长度、类型
  List list = [1, 2, 3];

  list[0] = 'one';
  list.add('four');

  print('unlimit list: ${list}');
}

// 测试 List 的 map 方法
void testListMap() {
  List<String> list;
  list = ['张三', '李四', '王五'];
  list.add('赵六');
  print('list: ${list}');

  // map 迭代器，遍历所有元素操作，然后将每个元素 操作ruturn 的结果值组装成一个新的 List 对象
  List list1 = list.map((index) {
    // print(index);
    return index + '-map';
  }).toList();
  print('list1: ${list1}');
  print('list: ${list}');
}

// 测试 List 的 where 方法
void testListWhere(String query) {
  List<String> list;
  list = ['张三', '李四', '王五', '王六'];
  print('【testListWhere】list: ${list}');

  // where 迭代器，遍历所有元素操作，然后将ruturn 的结果 true 的数据项组装成一个新的 List 对象
  List list1 = list.where((input) {
    return input.contains(query);
  }).toList();
  print('【testListWhere】list where($query): ${list1}');
  print('【testListWhere】list: ${list}');
}
